package com.oc.mba.util;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

/**
 * @brief log公共类
 * @author jingchao.sun
 * 
 */
public class ACMLog {
	
	private Logger logger;
	
	public <T> ACMLog(Class<T> clazz){
		logger = LogManager.getLogger(clazz);
	}
	
	
	/** log的种类 **/
	public enum TAG {
		DB, MSG, SYS ,NET, BUS, RES, ACT, REQ, NTY
	}

	/**
	 * @param <T>
	 * @brief DEBUG级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 */
	public void debug(TAG tag, String msg) {
		logger.debug(tagToString(tag) + msg);
	}

	/**
	 * @param <T>
	 * @brief INFO级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 */
	public void info(TAG tag, String msg) {
		logger.info(tagToString(tag) + msg);
	}

	/**
	 * @param <T>
	 * @brief WARN级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 */
	public void warn(TAG tag, String msg) {
		logger.info(tagToString(tag) + msg);
	}

	/**
	 * @param <T>
	 * @brief ERROR级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 */
	public void error(TAG tag, String msg) {
		logger.info(tagToString(tag) + msg);
	}

	/**
	 * @param <T>
	 * @brief ERROR级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 * @param e 异常栈
	 */
	public void error(TAG tag, String msg, Throwable e) {
		logger.error(tagToString(tag) + msg , e);
	}

	/**
	 * @param <T>
	 * @brief FATAL级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 */
	public void fatal(TAG tag, String msg) {
		logger.fatal(tagToString(tag) + msg);
	}

	/**
	 * @param <T>
	 * @brief FATAL级别的log
	 * @param tag TAG的实例
	 * @param msg 消息的内容
	 * @param e 异常栈
	 */
	public void fatal(TAG tag, String msg, Throwable e) {
		logger.fatal(tagToString(tag) + msg , e);
	}

	/**
	 * @brief TAG的实例生成字符串
	 * @param tag TAG的实例
	 * @return
	 */
	private String tagToString(TAG tag) {
		return " [ " + tag.toString() + " ] ";
	}

}
